// 定义State
// 'state' should be a method that returns an object in store/user/login.js 
// 在muxt中State必须声明为一个函数，且返回一个 对象
export const state = () => ({
  userinfo: {
    token: '',
    user: {},
  },
  // 用来存储回跳的页面路径
  backurl: '',
  userInfo: {},
  drafts: [],
  replay: {},
  commontData: {}
})

// 定义mutations
export const mutations = {
  setBackurl(state, data) {
    state.backurl = data
  },
  //修改store中的变量的方法，如果你要改变变量的值，就写这（vuex中state中的值不能直接修改）
  setUser(state, value) {
    state.token = value.token;
    state.userInfo = value.user;
  },
  loginout(state, v) {
    state.token = v;
    state.backurl = v
    state.drafts = [];
    state.userInfo = {}
  },
  setURL(state, value) {
    state.backurl = value
  },
  setDrafts(state, v) {
    state.drafts = v
  },
  setComment(state, v) {
    state.replay = v
  },
  setCommentData(state, v) {
    state.commontData = v
  },
  // 有一个默认参数state，通过state就可以获取在state中定义的成员
  // 第二个参数是你调用这个方法时所传递的数据，可以是任意类型的数据
  setUserInfo(state, data) {
    // state.userinfo = data
    // setTimeout(() => {
    state.userinfo.token = data.token
    state.userinfo.user = data.user
    // }, 1000);
  },
  // clearUserInfo(state){
  //     state.userinfo = {}
  // }
};


// 定义actions
export const actions = {
  registeruser({
    commit
  }, data) {
    return this.$axios({
      method: 'post',
      url: '/accounts/register',
      data
    }).then(res => {
      return res;
    });
  },
  // 这个函数中可以来执行异步操作，拿到异步操作的结果，调用mutaitons中的方法，达到为state中的成员赋值的目的
  // store：是默认的参数
  setUserInfoAction(store, data) {
    // store就是当前的仓库对象，里面的commot函数可以调用mutaitons中的成员
    // 调用mutations中的成员
    store.commit('setUserInfo', data)
  },
  // 将登陆操作封装到actions中
  loginAction({
    commit
  }, canshu) {
    // 异步请示
    return this.$axios({
      method: "post",
      url: "/accounts/login",
      data: canshu
    }).then(res => {
      // 如果在user仓库外部调用actions或者mutations中的方法，则需要使用this.$store
      // 如果在同一个仓库中进行方法的调用，则不需要再写this.$store了
      // 同时在同一个仓库中调用方法，也不需要再指定仓库，默认就是当前仓库
      // this.$store.commit('user/setUserInfo',res.data)
      commit('setUserInfo', res.data)
      // 如果在外围还需要使用这个值，则必须返回
      return res
    })
  },
  getcaptcha({
    commit
  }, data) {
    return this.$axios({
      method: 'post',
      url: '/captchas',
      data
    }).then(res => {
      return res;
    });
  },
  // JiPiao - 实时机票城市
  /// airs/city
  seatchdata({
    commit
  }, data) {
    return this.$axios({
      url: 'airs/city',
      params: data
    }).then(res => {
      return res;
    });
  }
}
// export const state = () => ({

// })

// export const mutations = { 
// };

//异步操作放在actions里面 这个可以封装公用的函数
// export const actions = {
//这里的{commit} 是结构这个当前对象的 默认会有一个store对象 我只需要里面的commit方法 
// loginAction({
//   commit
// }, data) {
//   //当下面需要放回请求成功的值时候 需要返回这个proims
//   return this.$axios({
//     url: '/accounts/login',
//     method: 'post',
//     data
//   }).then(res => {
//     commit('setUser', res.data) //因为vuex中都只能使用mutations来处理数据
//     return res //需要返回值
//   })
// }
// }
